/******************************************************
*  Copyright(c) pages.ilovezxl.top
*  FileName :ostime_linux.c
*  Author : rivulet.dave
*  Description : 系统适配层模板
*  Data : 2020-07-21
******************************************************/

/*********************************************************************
 * INCLUDES
 */

#include "stdrope.h"

#include "sallib.h"
#include "salagent.h"

#if (SAL_CFG_INI == _ENABLE)

#include "fs.h"
#include "log.h"
#include "iniparser.h"
#include "cfg_ini.h"

/*********************************************************************
 *  EXTERNAL VARIABLES
 */

/*********************************************************************
 * MACROS
 */

#define CFG_INI_LINE_MAX    128

/*********************************************************************
 * TYPES
 */


/*********************************************************************
 * FUNCTIONS DECLARE
 */


/*********************************************************************
 *  VARIABLES
 */


/*********************************************************************
 * FUNCTIONS
 */

/**
 *   @Description: 读取INI文件数据
 *   @param : pFilePath - 文件路径
 *   @param : pSection
 *   @param : pKey - 关键字
 *   @param : pValue - 读取的数据缓存
 *   @param : iMaxLen - 缓存大小
 *   @return: _OK/_ERR
 */
int32_t INI_Read(const char *pFilePath, const char *pSection, const char *pKey, char *pValue, uint32_t iMaxLen)
{
    const char *pRetValue;
    dictionary  *pstIniObj = NULL;
    char acTemp[CFG_INI_LINE_MAX] = { 0 };

    pstIniObj = iniparser_load(pFilePath);
    if (!pstIniObj)
    {
        LOG_ERR(TOSTR(MOD_CFG), "load ini file failed.\n");
        return _ERR;
    }

    sprintf(acTemp, "%s:%s", pSection, pKey);
    pRetValue = iniparser_getstring(pstIniObj, acTemp, NULL);
    if (!pRetValue || iMaxLen - 1 < strlen(pRetValue))
    {
        iniparser_freedict(pstIniObj);
        return _ERR;
    }

    strcpy(pValue, pRetValue);
    iniparser_freedict(pstIniObj);
    return _OK;
}

/**
 *   @Description: 写入INI文件数据
 *   @param : pFilePath - 文件路径
 *   @param : pSection
 *   @param : pKey - 关键字
 *   @param : pValue - 写入的数据
 *   @return: _OK/_ERR
 */
int32_t INI_Write(const char *pFilePath, const char *pSection, const char *pKey, const char *pValue)
{
    fd_t hFile;
    dictionary  *pstIniObj = NULL;
    char acTemp[CFG_INI_LINE_MAX] = { 0 };

    pstIniObj = iniparser_load(pFilePath);
    if (!pstIniObj)
    {
        LOG_ERR(TOSTR(MOD_CFG), "load ini file failed.\n");
        return _ERR;
    }

    sprintf(acTemp, "%s:%s", pSection, pKey);
    if (0 != iniparser_set(pstIniObj, acTemp, pValue))
    {
        iniparser_freedict(pstIniObj);
        return _ERR;
    }

    fsOpen(&hFile, pFilePath, F_RDWR | F_CREAT);
    iniparser_dump_ini(pstIniObj, &hFile);
    fsClose(&hFile);

    iniparser_freedict(pstIniObj);
    return _OK;
}

/**
 *   @Description: 在Flash中读取INI数据
 *   @param : uiAddr - flash地址
 *   @param : pSection
 *   @param : pKey - 关键字
 *   @param : pValue - 读取的数据缓存
 *   @param : iMaxLen - 缓存大小
 *   @return: _OK/_ERR
 */
int32_t INI_ReadFlash(const uint32_t uiAddr, const char *pSection, const char *pKey, char *pValue, uint32_t iMaxLen)
{
    return _OK;
}

/**
 *   @Description: 向Flash中写入INI数据
 *   @param : uiAddr - flash地址
 *   @param : pSection
 *   @param : pKey - 关键字
 *   @param : pValue - 写入的数据
 *   @return: _OK/_ERR
 */
int32_t INI_WriteFlash(const uint32_t uiAddr, const char *pSection, const char *pKey, const char *pValue)
{
    return _OK;
}

#endif  // SAL_CFG_INI == _ENABLE

/************************************** The End Of File **************************************/



